package com.flying.exceptiion;

import org.junit.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 刘鹏飞
 * @ClassName Test01
 * @Date 2024/12/18 18:21
 * @Created by 刘鹏飞
 * @Description 异常
 *
 * 异常机制的本质: 当程序出现异常,程序安全的退出,处理完后继续执行的机制
 * Java中的异常分类:
 *                      Throwable
 *              Error                Exception
 *                                       -- RuntimeException (运行时异常)
 *                                       -- (CheckedException)编译时异常
 * Error: JWM虚拟机内部的错误,程序无法处理的错误,程序以及崩溃
 * Exception: 程序本身能够处理的异常;分为
 *      运行时异常: 空指针,数组下标越界 ,除数不为0
 *      编译时异常: 语法上的错误...,编译不通过的
 *
 *
 * 异常的处理思路:
 *      1. 规避,就是在出现异常之前使用if语句规避异常出现
 *          在Java中,只有RuntimeException 类型的异常可以规避
 *      2. 使用异常处理语句解决异常:  try...catch...finally
 */
public class TestRuntimeException01 {


    /**
     * 测试运行时异常和处理方式 (RuntimeException)
     * @throws Exception
     */
    @Test
    public void test1() throws Exception {
        // java.lang.ArithmeticException: / by zero
        int b=0;
        if (b!=0){
            System.out.println(b/0);
        }

    }

    /**
     * NullPointerException
     */
    @Test
    public void test2(){
            String str=null;
            if (str != null) {
                System.out.println(str.charAt(1));
            }
    }

    /**
     *   //ClassCastException
     */
    @Test
    public void test3(){
        Animal a=new Cat();
        if (a instanceof Dog){
            Dog d=(Dog)a;
        }

    }


    /**
     * //IndexOutofBoundsException
     */
    @Test
    public void test4(){
        int[] arr= new int[5];
        int index=5;
        if (index>=0 && index<arr.length){
            System.out.println(arr[index]);
        }

    }

    /**
     * //NumberFormatException
     */
    @Test
    public void test5(){

        String s="1234abc";
//        int i = Integer.parseInt(s);
//        System.out.println(i);
        Pattern p=Pattern.compile("^\\d+$");
        Matcher m=p.matcher(s);
        if (m.matches()){ // 如果str匹配代表数字的正则表达式,才会转换
            System.out.println(Integer.parseInt(s));

        }


    }



    class Animal{

    }
    class Dog extends Animal{

    }
    class Cat extends Animal{

    }








}
